package com.study.zk.lock.simple;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 该场景如果是单机是可以的，但此处是JVM锁，在分布式下每个订单服务类OrderService使用的是各自的锁，
 * 所以订单不唯一
 *
 * @author: chenhs
 * @date: Created in 6:57 2020/2/4
 **/
public class OrderServiceImplWithLock implements OrderService {
    /**
     * 此处static模拟了---将订单生成器独立成一个tomcat服务（场景）
     */
    private static OrderCodeGenerator ocg = new OrderCodeGenerator();

    @Override
    public void createOrder() {
        String orderCode;
        //jvm锁
        Lock lock = new ReentrantLock();
        try {
            lock.lock();
            //获取订单号
            orderCode = ocg.getOrderCode();
        } finally {
            lock.unlock();
        }

        System.out.println(Thread.currentThread().getName() + "================>" + orderCode);
        //...业务代码，此处省略100行代码
    }
}
